#!/usr/bin/env bash

get_status() {
	s=$1
	if [ "$s" = "Playing" ]; then
		echo ""
	else
		echo ""
	fi
}

get_length_sec() {
	len=$1
	if [ -z "$len" ]; then
		echo 0
	else
		bc <<< "$len / 1000000"
	fi
}

get_length_time() {
	len=$1
	if [ -n "$len" ]; then
		len=$(bc <<< "$len / 1000000 + 1")
		date -d@"$len" +%M:%S
	else
		echo ""
	fi
}

get_position() {
	pos=$1
	len=$2
	if [ -n "$pos" ]; then
		bc -l <<< "$pos / $len * 100"
	else
		echo 0
	fi
}

get_position_time() {
	pos=$1
	if [ -n "$pos" ]; then
		date -d@"$(bc <<< "$pos / 1000000")" +%M:%S
	else
		echo ""
	fi
}

get_cover() {
	# COVER_URL=$1
	mkdir -p "$HOME/Pictures/eww"
	cd "$HOME/Pictures/eww" || exit

	IMGPATH="cover_art"
	# echo '{"image": "null", "color": {"alpha":"100","colors":{"color0":"null","color1":"null","color10":"null","color11":"null","color12":"null","color13":"null","color14":"null","color15":"null","color2":"null","color3":"null","color4":"null","color5":"null","color6":"null","color7":"null","color8":"null","color9":"null"},"special":{"background":"null","cursor":"null","foreground":"null"},"wallpaper":"~/Pictures/eww/cover_art","source":"󱛟"},"materialcolor":{"onPrimary":"null","onPrimaryContainer":"null","onSecondaryContainer":"null","primary":"null","primaryContainer":"null","secondaryContainer":"null"}}'
	# echo '{"image": "~/Pictures/eww/cover_art_default","source":"󱛟"}}'

	playerctl -F metadata mpris:artUrl 2>/dev/null | while read -r COVER_URL; do
		music_source='󰐍'
		COVER_URL=${COVER_URL//blob:/}
		COVER_URL=${COVER_URL//file:\/\//}
		COVER_URL=${COVER_URL//%20/ }
		if [[ "$COVER_URL" = *"https"* ]]; then
			music_source='󰖟'
			coverurl="$(playerctl metadata mpris:artUrl)"
			coverurl_highres_yt="${coverurl/hqdefault/maxresdefault}"
			coverurl_highres_soundcloud="${coverurl/80x80/500x500}"
			# SoundCloud
			if [[ "$coverurl" == *"sndcdn"* ]]; then
				music_source='󰓀'
				curl --silent --output "$IMGPATH""_soundcloud" "$coverurl_highres_soundcloud" -q –read-timeout=0.1
				cp "$IMGPATH""_soundcloud" "$IMGPATH"
				imgsize=$(echo $(du -b $HOME/Pictures/eww/cover_art | tr '\t' '\n' | grep -v 'cover_art'))	
			# Youtube
			elif [[ "$coverurl" == *"ytimg"* ]]; then
				music_source='󰗃'
				curl --silent --output "$IMGPATH""_yt" "$coverurl_highres_yt" -q –read-timeout=0.1
				cp "$IMGPATH""_yt" "$IMGPATH"
				imgsize=$(echo $(du -b $HOME/Pictures/eww/cover_art | tr '\t' '\n' | grep -v 'cover_art'))
			# Likely YT Music
			elif [[ "$coverurl" == *"googleusercontent"* ]]; then
				music_source=''
				curl --silent --output "$IMGPATH""_other" "$coverurl" -q –read-timeout=0.1
				cp "$IMGPATH""_other" "$IMGPATH"
				imgsize=$(echo $(du -b $HOME/Pictures/eww/cover_art | tr '\t' '\n' | grep -v 'cover_art'))
			elif [[ "$coverurl" == *"spotify"* ]]; then
				music_source='󰓇'
				curl --silent --output "$IMGPATH""_other" "$coverurl" -q –read-timeout=0.1
				cp "$IMGPATH""_other" "$IMGPATH"
				imgsize=$(echo $(du -b $HOME/Pictures/eww/cover_art | tr '\t' '\n' | grep -v 'cover_art'))
			# Any other
			else
				curl --silent --output "$IMGPATH""_other" "$coverurl" -q –read-timeout=0.1
				cp "$IMGPATH""_other" "$IMGPATH"
				imgsize=$(echo $(du -b $HOME/Pictures/eww/cover_art | tr '\t' '\n' | grep -v 'cover_art'))
			fi
			# Fallback
			if [ "$imgsize" == "0" ] || [ ! "$(diff $HOME/Pictures/eww/cover_art $HOME/Pictures/eww/cover_art_error)" ]; then
				curl --silent --output "$IMGPATH""_lowres" "$coverurl" -q –read-timeout=0.1
				cp "$IMGPATH""_lowres" "$IMGPATH"
			fi

			#Generate colors
			cd ..
			scripts/colorgen "$HOME/Pictures/eww/$IMGPATH" $coverurl "$music_source"
			cd "~/Pictures/eww"
		elif [ "$COVER_URL" = "" ]; then
		    echo '{"image": "", "color": "$bg"}'
		else
			music_source='󱛟'
			cp "$COVER_URL"  "$IMGPATH"
			
			cd ..
			scripts/colorgen "$HOME/Pictures/eww/$IMGPATH" $coverurl "$music_source"
			cd "$HOME/Pictures/eww"
		fi
	done
}

# SANITIZE FIX
sanitize() {
	echo "$1" | sed 's/"/\"/g'
}

if [ "$1" = "cover" ]; then
	get_cover
elif [ "$1" == "name" ]; then
	lentolimit=41
    if [ "$2" != "" ]; then
		lentolimit=$2
	fi
	# echo '{"artist": "", "title": ""}'
	playerctl -F metadata -f '{{title}}\{{artist}}\' 2>/dev/null | while IFS="$(printf '\\')" read -r title artist; do
	
		if [[ "$title" == *" - YouTube"* && "$artist" == "" ]]; then
			continue
		elif [[ "$title" == *"YouTube Music" && "$artist" == "" ]]; then
			continue
		fi
		# title=$(echo "$title" | cut -d '-' -f2)
		title=$(scripts/limitlen.py "$title" "$lentolimit")
		artist=$(scripts/limitlen.py "$artist" "$lentolimit")
		
		gojq --null-input -r -c \
			--arg artist "$(sanitize "$artist")" \
			--arg title "$(sanitize "$title")" \
			'{"artist": $artist, "title": $title}'
		
	done
else
	# echo '{"artist": "", "title": "", "status": "", "position": "", "position_time": "", "length": ""}'
	playerctl -F metadata -f '{{title}}\{{artist}}\{{status}}\{{position}}\' 2>/dev/null | while IFS="$(printf '\\')" read -r title artist status position; do
	
		if [[ "$title" == *" - YouTube" && "$artist" == "" ]]; then
			continue
		elif [[ "$title" == *"YouTube Music" && "$artist" == "" ]]; then
			continue
		fi
		len=$(playerctl metadata mpris:length)
		# title=$(echo "$title" | cut -d '-' -f2)
		title=$(scripts/limitlen.py "$title" 40)
		artist=$(scripts/limitlen.py "$artist" 40)

		gojq --null-input -r -c \
			--arg artist "$(sanitize "$artist")" \
			--arg title "$(sanitize "$title")" \
			--arg status "$(get_status "$status")" \
			--arg pos "$(get_position "$position" "$len")" \
			--arg pos_time "$(get_position_time "$position")" \
			--arg length "$(get_length_time "$len")" \
			'{"artist": $artist, "title": $title, "status": $status, "position": $pos, "position_time": $pos_time, "length": $length}'
		
	done
fi
